package C9_3_ConsolidateDuplicateConditionalFragments;

/**
 * @author xugang1
 * @updated 2022/7/25
 * @description 合并重复的条件片段
 */

public class ConsolidateDuplicateConditionalFragments {

    /**
     * 做法：
     * 1、鉴别出“执行方式不随条件变化而变化”的代码
     * 2、共通代码位于条件表达式起始处，就移到条件表达式之前。
     * 3、共通代码位于条件表达式尾端，就移到条件表达式之后。
     * 4、如果这些共通代码位于条件表达式中段，就需要观察共通代码之前或之后的代码是否改变了什么东西。
     * 如果的确有所改变，应该首先将共通代码向前或向后移动，移至条件表达式的起始处或尾端，再以前面所说的办法来处理。
     * 如果共通代码不止一条语句，应该首先使用Extract Method (110)将共通代码提炼到一个独立函数中，再以前面所说的办法来处理。
     * 5、如果这些共通代码位于条件表达式中段，就需要观察共通代码之前或之后的代码是否改变了什么东西。
     * 如果的确有所改变，应该首先将共通代码向前或向后移动，移至条件表达式的起始处或尾端，再以前面所说的办法来处理。
     * 如果共通代码不止一条语句，应该首先使用Extract Method (110)将共通代码提炼到一个独立函数中，再以前面所说的办法来处理。
     */



    /**
     * 重构前
     */
    public void test1(){
        if(isSpecialDeal()){
            total = price * 0.95;
            send();
        }
        else{
            total = price * 0.98;
            send();
        }
    }


    /**
     * 重构后
     */
    public void test2(){
        if(isSpecialDeal())
            total = price * 0.95;
        else
            total = price * 0.95;
        send();

    }
}
